Prior to setting forth the background of the invention, it may be helpful to set forth definitions of certain terms that will be used hereinafter.
The term “plug-in” or “plugin” as used herein is defined as a software component that adds a specific feature to an existing computer program. When a program supports plug-ins, it enables customization.
The term “dynamic loading as used herein is defined a mechanism by which a computer program can, at run time, load a library (or other binary) into memory, retrieve the addresses of functions and variables contained in the library, execute those functions or access those variables, and unload the library from memory. Dynamic loading is one of the three mechanisms by which a computer program can use some other software; the other two are static linking and dynamic linking.
Unlike static linking and dynamic linking, dynamic loading allows a computer program to start up in the absence of these libraries, to discover available libraries, and to potentially gain additional functionality.
In any centralized computerized management system that deals with multiple versions of the same software product (for example, a file system) at the same time, there is a challenge in addressing version upgrade of the software product.
Specifically, whenever a new functionality is added to the product it becomes necessary to also upgrade the centralized management system. This is disadvantageous because it is both time consuming and expensive in processor usage terms.
Dynamically loading plugins for coexisting versions may lead to a problem. This is because the difference between the plugins of the different version is minor so dynamically loading them results in redundantly loading the same code for each one of them unnecessarily.